#include <stdio.h>
#include <string.h>

const int MaxLen=100;

//特殊  大数乘法 最保留len位 对10^len取模的乘法
//传入数组是倒叙 返回也是倒叙
void modmul(int * array1,int* array2,int *result,int len)
{
    //将结果储存在 resullt中，result[i + j] = a[i] * b[j]是关键算法 
    int i,j;
    for(i = 0; i < len; i++)
    {
        result[i]=0;
    }
    for(i = 0; i < len; i++)
    {
        for(j = 0; j < len-i; j++)
        {
            result[i + j] += array1[i] * array2[j];
        }
    }

    //从低位到高位进行进位
    for(i = 0; i < len; i++)
    {
        if(result[i] > 9)
        {   
            if(i<len-1)
            {
                result[i+1] += result[i]/10;
            }
            result[i] %= 10; 
        }
    }
}

//大数乘法
//传入数组是倒叙 返回也是倒叙
void mul(int * array1,int len1,int* array2,int len2,int *result,int &len)
{
    //将结果储存在 resullt中，result[i + j] = a[i] * b[j]是关键算法 
    int i,j;
    for(i = 0; i < (len1+len2); i++)
    {
        result[i]=0;
    }
    for(i = 0; i < len1; i++)
    {
        for(j = 0; j < len2; j++)
        {
            result[i + j] += array1[i] * array2[j];
        }
    }

    //从低位到高位进行进位
    for(i = 0; i < (len1+len2); i++)
    {
        if(result[i] > 9)
        {
            result[i+1] += result[i]/10;
            result[i] %= 10; 
        }
    }

    //将前导0全部剔掉，比如我们结果是236，在result中
    //是这样存储的63200……我们需要定位到第一个不为零的数，它的位置也就是i ，两数相乘，位数最多是两数位数之和
    for(i = len1 + len2-1; i >= 0 ; i--)
    {
        if(result[i] != 0) 
        {
            break;
        }
    }
    len=i+1;
}

int* formatIntArray(char* c,int len)
{
    int i=0;
    int* array=new int[len];
    for(i=0;i<len;i++)
    {
        array[i]=0;
    }
    i=0;
    int c_len=strlen(c);
    int min=c_len>len?len:c_len;
    while (i<min)
    {
        array[i]=(int)(c[c_len-i-1]-'0');
        i++;
    }
    return array;
}

void printNum(int * array,int len){
    for(int i=len-1; i >=0; i--)
    {
        printf("%d",array[i]);
    }
    printf("\n");
}

int main(){
    char n[MaxLen];
    int k;
    scanf("%s %d",n,&k);

    int i,j;

    //输入值
    int* input=formatIntArray(n,k);
    //每次乘积结果
    int* modmulResult=new int[k];
    //上次乘积结果
    int* tmpResult=formatIntArray(n,k);
    //累乘的系数 初始化是当前值
    int* modmulInput=formatIntArray(n,k);

    int flag=1;

    //每位循环的长度
    int* result=new int[k];
	for(i=0;i<k;i++)
	{   
        //计算新的累乘系数
        if(i>0)
        {
            for(j=0;j<k;j++)
            {
                modmulResult[j]=modmulInput[j];
            }
            // printf("modmulResult:");
            // printNum(modmulResult,i+1);
            // printf("\n");

            for(j=1;j<result[i-1];j++)
            {
                modmul(modmulResult,modmulInput,tmpResult,k);
                int* tmp=modmulResult;
                modmulResult=tmpResult;
                tmpResult=tmp;

                // printf("modmulResult:");
                // printNum(modmulResult,i+1);
                // printf("\n");
            }

            int* tmp=modmulResult;
            modmulResult=modmulInput;
            modmulInput=tmp;
        }

        // printf("modmulInput:");
        // printNum(modmulInput,i+1);
        // printf("\n");
        
        for(j=0;j<=i;j++)
        {
            modmulResult[j]=input[j];
        }
        j=0;
        do
        {
            modmul(modmulResult,modmulInput,tmpResult,i+1); 
            int* tmp=modmulResult;
            modmulResult=tmpResult;
            tmpResult=tmp;
            j++;

            // printNum(modmulResult,i+1);
            // printf("\n");

            //循环次数超过10 就证明在别的数上面循环了
            if(j>10)
            {
                flag=0;
                break;
            }
        }while (modmulResult[i]!=input[i]);

        if(flag==0)
        {
            break;
        }

        result[i]=j;

        // printf("result:");
        // printNum(result,i+1);
        // printf("\n");

        
	}

    if(flag==0)
    {
        printf("-1\n");
    }
    else{
        // printNum(result,k);

        modmulResult[0]=1;
        int len=1;
        int tmplen;
        int mulInput[1];
        for(i=0;i<k;i++)
        {
            mulInput[0]=result[i];
            mul(modmulResult,len,mulInput,1,tmpResult,tmplen);

            len=tmplen;
            int* tmp=modmulResult;
            modmulResult=tmpResult;
            tmpResult=tmp;
        }
        printNum(modmulResult,len);
    }

    


    delete input;
    delete result;
    delete tmpResult;
    delete modmulInput;

    return 0;
}